今天要來介紹Room,Room是專門用來儲存本地端資料,相較於SQLife Google更推薦使用該套件,因為它使用起來更簡潔,還能盡可能減少重複且容易出錯的樣板程式碼的便利註解!!!那接下來就來好好介紹。
這邊是用了一個單利的方法,不然新增資料庫是很吃資源的。
註解 @Database
@Database(entities = {MyData.class},version = 1,exportSchema = false)
public abstract class DataBase extends RoomDatabase {
public static final String DB_NAME = "RecordData.db";//資料庫名稱
private static volatile DataBase instance;
public static synchronized DataBase getInstance(Context context){
//如果沒有建立過資料庫
if(instance == null){
instance = create(context);//創立新的資料庫
}
return instance;
}
private static DataBase create(final Context context){
return Room.databaseBuilder(context,DataBase.class,DB_NAME).build();
}
public abstract DataUao getDataUao();//設置對外接口
}
首先先建立Getter-Setter的檔案,就像是之前接API時一樣建立你資料表要用的資料。
//標示MyData為資料表名子為MyTable
@Entity(tableName = "MyTable")
public class MyData {
private String name;
//設定uid為主件
@PrimaryKey(autoGenerate = true)
private int uid;
private String id;
private String hobby;
public MyData(String name, String id, String hobby) {
this.name = name;
this.id = id;
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
這邊是用一些SQLife語法來與資料庫進行互動。
@Dao
public interface DataUao {
String tableName = "MyTable";
//新增資料
//預設萬一執行出錯怎麼辦,REPLACE為覆蓋
@Insert(onConflict = OnConflictStrategy.REPLACE)
Completable initsert(MyData data);
//拿取所有資料
@Query("SELECT * FROM " + tableName)
Maybe<List<MyData>> displayAll();
//修改資料
@Query("UPDATE "+tableName+" SET name = :name,id=:id,hobby=:hobby WHERE id = :id" )
Completable updateData(String name,String id,String hobby);
成功建立後,就能在底下的APP Inspection看到資料庫。